import streamlit as st
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from datetime import datetime, timedelta
import sys
import os
import numpy as np
import hashlib

# 添加src和styles到路径
sys.path.append(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'src'))
sys.path.append(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'styles'))

from common_styles import apply_common_styles, create_page_title, create_metric_card

# 应用统一样式
apply_common_styles()

# 客户级别样式
st.markdown("""
<style>
    .vip-customer { 
        background: linear-gradient(135deg, #fff3cd 0%, #ffeaa7 100%); 
        border: 2px solid #ffc107; 
        border-radius: 12px;
        padding: 1rem;
        margin: 0.5rem 0;
    }
    .important-customer { 
        background: linear-gradient(135deg, #d1ecf1 0%, #a8e6cf 100%); 
        border: 2px solid #17a2b8; 
        border-radius: 12px;
        padding: 1rem;
        margin: 0.5rem 0;
    }
    .regular-customer { 
        background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); 
        border: 1px solid #6c757d; 
        border-radius: 12px;
        padding: 1rem;
        margin: 0.5rem 0;
    }
</style>
""", unsafe_allow_html=True)

# 页面标题
create_page_title("客户管理系统", "👥")

# 侧边栏功能选择
st.sidebar.title("功能菜单")
function = st.sidebar.selectbox(
    "选择功能",
    ["📊 客户概览", "👤 客户档案", "📈 客户分析", "🎯 客户分级", "📞 客户跟进", "📋 订单历史", "💰 客户价值"]
)

# 客户概览
if function == "📊 客户概览":
    st.header("客户概览")
    
    # 关键客户指标
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.markdown('<div class="metric-card">', unsafe_allow_html=True)
        st.metric("客户总数", "1,248", "56")
        st.markdown('</div>', unsafe_allow_html=True)
    
    with col2:
        st.markdown('<div class="metric-card">', unsafe_allow_html=True)
        st.metric("活跃客户", "892", "23")
        st.markdown('</div>', unsafe_allow_html=True)
    
    with col3:
        st.markdown('<div class="metric-card">', unsafe_allow_html=True)
        st.metric("VIP客户", "156", "12")
        st.markdown('</div>', unsafe_allow_html=True)
    
    with col4:
        st.markdown('<div class="metric-card">', unsafe_allow_html=True)
        st.metric("客户满意度", "4.6/5.0", "0.2")
        st.markdown('</div>', unsafe_allow_html=True)
    
    st.markdown("---")
    
    # 客户分布分析
    col1, col2 = st.columns(2)
    
    with col1:
        st.subheader("客户地区分布")
        
        region_data = pd.DataFrame({
            '地区': ['华东', '华南', '华北', '华中', '西南', '东北', '西北'],
            '客户数量': [356, 298, 245, 189, 98, 45, 17],
            '占比': [28.5, 23.9, 19.6, 15.1, 7.9, 3.6, 1.4]
        })
        
        fig_region = px.pie(region_data, values='客户数量', names='地区',
                           title="客户地区分布")
        st.plotly_chart(fig_region, use_container_width=True)
    
    with col2:
        st.subheader("客户行业分布")
        
        industry_data = pd.DataFrame({
            '行业': ['制造业', '科技', '零售', '金融', '医疗', '教育', '其他'],
            '客户数量': [425, 298, 189, 156, 98, 56, 26],
            '平均订单额': [850000, 650000, 320000, 1200000, 480000, 280000, 150000]
        })
        
        fig_industry = px.bar(industry_data, x='行业', y='客户数量',
                             title="客户行业分布")
        fig_industry.update_layout(xaxis_tickangle=45)
        st.plotly_chart(fig_industry, use_container_width=True)
    
    # 客户增长趋势
    st.subheader("客户增长趋势")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 月度新增客户
        months = pd.date_range(start='2024-01-01', end='2024-12-31', freq='M')
        customer_growth = pd.DataFrame({
            '月份': months,
            '新增客户': [45 + i*2 + np.random.randint(-10, 15) for i in range(len(months))],
            '流失客户': [8 + np.random.randint(-3, 8) for i in range(len(months))]
        })
        customer_growth['净增长'] = customer_growth['新增客户'] - customer_growth['流失客户']
        
        fig_growth = px.bar(customer_growth, x='月份', y=['新增客户', '流失客户'],
                           title="月度客户增长情况", barmode='group')
        st.plotly_chart(fig_growth, use_container_width=True)
    
    with col2:
        # 客户生命周期价值
        clv_data = pd.DataFrame({
            '客户等级': ['VIP客户', '重要客户', '普通客户', '新客户'],
            '平均CLV': [2800000, 1200000, 450000, 180000],
            '客户数量': [156, 298, 645, 149]
        })
        
        fig_clv = px.scatter(clv_data, x='客户数量', y='平均CLV', 
                            size='客户数量', color='客户等级',
                            title="客户生命周期价值分布")
        st.plotly_chart(fig_clv, use_container_width=True)
    
    # 客户活跃度分析
    st.subheader("客户活跃度分析")
    
    activity_data = pd.DataFrame({
        '活跃度': ['高活跃', '中活跃', '低活跃', '休眠'],
        '客户数量': [298, 356, 238, 356],
        '占比': [23.9, 28.5, 19.1, 28.5],
        '平均订单频次': [8.5, 4.2, 1.8, 0.2],
        '平均订单金额': [680000, 420000, 280000, 150000]
    })
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.dataframe(activity_data, use_container_width=True)
    
    with col2:
        fig_activity = px.bar(activity_data, x='活跃度', y='客户数量',
                             color='平均订单金额',
                             title="客户活跃度分布")
        st.plotly_chart(fig_activity, use_container_width=True)
    
    # 重点关注客户
    st.subheader("重点关注客户")
    
    focus_customers = pd.DataFrame({
        '客户名称': ['华为技术', '小米科技', '比亚迪', '宁德时代', '美的集团'],
        '客户等级': ['VIP', 'VIP', '重要', 'VIP', '重要'],
        '本月订单': [3, 2, 4, 2, 3],
        '订单金额': [2800000, 1650000, 1200000, 2100000, 980000],
        '上次联系': ['2天前', '1天前', '3天前', '1天前', '5天前'],
        '客户经理': ['张三', '李四', '王五', '张三', '李四'],
        '状态': ['正常', '正常', '需跟进', '正常', '需跟进']
    })
    
    # 根据状态设置行颜色
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_focus_customer_status(row):
        if row['状态'] == '需跟进':
            return ['background-color: #ffebee'] * len(row)
        else:
            return [''] * len(row)
    
    styled_focus_customers = focus_customers.style.apply(highlight_focus_customer_status, axis=1)
    st.dataframe(styled_focus_customers, use_container_width=True)

# 客户档案
elif function == "👤 客户档案":
    st.header("客户档案管理")
    
    # 搜索和筛选
    col1, col2, col3 = st.columns(3)
    
    with col1:
        search_customer = st.text_input("搜索客户", placeholder="输入客户名称或编码")
    with col2:
        customer_level = st.selectbox("客户等级", ['全部', 'VIP客户', '重要客户', '普通客户', '新客户'])
    with col3:
        customer_status = st.selectbox("客户状态", ['全部', '活跃', '一般', '休眠', '流失'])
    
    # 客户列表
    st.subheader("客户列表")
    
    customer_data = pd.DataFrame({
        '客户编码': [f'C{i:04d}' for i in range(1, 21)],
        '客户名称': ['华为技术', '小米科技', '比亚迪', '宁德时代', '美的集团', '格力电器', 
                  '海尔集团', '联想集团', '腾讯科技', '阿里巴巴', '百度', '京东',
                  '字节跳动', '滴滴出行', '美团', '拼多多', '网易', '新浪', '搜狐', '360'],
        '行业': ['科技', '科技', '汽车', '新能源', '家电', '家电', '家电', '科技', 
               '互联网', '互联网', '互联网', '电商', '互联网', '出行', '生活服务', 
               '电商', '互联网', '媒体', '媒体', '安全'],
        '客户等级': ['VIP', 'VIP', '重要', 'VIP', '重要', '重要', '普通', '重要',
                  'VIP', 'VIP', '重要', 'VIP', '重要', '普通', '普通', '重要',
                  '普通', '普通', '普通', '普通'],
        '注册时间': [datetime.now() - timedelta(days=np.random.randint(30, 1000)) for _ in range(20)],
        '最后订单': [datetime.now() - timedelta(days=np.random.randint(1, 90)) for _ in range(20)],
        '累计订单': np.random.randint(5, 50, 20),
        '累计金额': [np.random.randint(500000, 5000000) for _ in range(20)],
        '客户经理': ['张三', '李四', '王五', '赵六'] * 5,
        '状态': np.random.choice(['活跃', '一般', '休眠'], 20, p=[0.6, 0.3, 0.1])
    })
    
    # 格式化显示
    display_customers = customer_data.copy()
    display_customers['注册时间'] = display_customers['注册时间'].dt.strftime('%Y-%m-%d')
    display_customers['最后订单'] = display_customers['最后订单'].dt.strftime('%Y-%m-%d')
    display_customers['累计金额'] = display_customers['累计金额'].apply(lambda x: f'¥{x:,.0f}')
    
    st.dataframe(display_customers, use_container_width=True)
    
    # 客户详情
    st.subheader("客户详情")
    
    selected_customer = st.selectbox("选择客户查看详情", customer_data['客户名称'].tolist())
    
    if selected_customer:
        customer_info = customer_data[customer_data['客户名称'] == selected_customer].iloc[0]
        
        col1, col2, col3 = st.columns(3)
        
        with col1:
            st.markdown("**基本信息**")
            st.info(f"**客户编码**: {customer_info['客户编码']}")
            st.info(f"**客户名称**: {customer_info['客户名称']}")
            st.info(f"**所属行业**: {customer_info['行业']}")
            st.info(f"**客户等级**: {customer_info['客户等级']}")
        
        with col2:
            st.markdown("**联系信息**")
            st.info(f"**联系人**: 李经理")
            st.info(f"**联系电话**: 138-0000-0000")
            st.info(f"**邮箱**: contact@{selected_customer.lower().replace(' ', '')}.com")
            st.info(f"**地址**: 上海市浦东新区")
        
        with col3:
            st.markdown("**业务信息**")
            st.info(f"**客户经理**: {customer_info['客户经理']}")
            st.info(f"**注册时间**: {customer_info['注册时间'].strftime('%Y-%m-%d')}")
            st.info(f"**最后订单**: {customer_info['最后订单'].strftime('%Y-%m-%d')}")
            st.info(f"**客户状态**: {customer_info['状态']}")
        
        # 客户标签
        st.markdown("**客户标签**")
        tags = ['优质客户', '长期合作', '价格敏感', '技术导向', '决策快速']
        selected_tags = st.multiselect("选择标签", tags, default=tags[:3])
        
        # 客户备注
        st.markdown("**客户备注**")
        customer_notes = st.text_area("备注信息", 
                                    value=f"{selected_customer}是我们的重要合作伙伴，合作关系稳定，付款及时。")
    
    # 新增客户
    st.subheader("新增客户")
    
    with st.expander("点击展开新增客户表单"):
        with st.form("add_customer_form"):
            col1, col2 = st.columns(2)
            
            with col1:
                customer_name = st.text_input("客户名称*")
                industry = st.selectbox("所属行业", ['制造业', '科技', '零售', '金融', '医疗', '教育', '其他'])
                customer_type = st.selectbox("客户类型", ['企业客户', '个人客户', '政府客户'])
                customer_level = st.selectbox("客户等级", ['新客户', '普通客户', '重要客户', 'VIP客户'])
            
            with col2:
                contact_person = st.text_input("联系人*")
                contact_phone = st.text_input("联系电话*")
                contact_email = st.text_input("邮箱地址")
                address = st.text_area("客户地址")
            
            customer_manager = st.selectbox("客户经理", ['张三', '李四', '王五', '赵六'])
            initial_notes = st.text_area("初始备注")
            
            submitted = st.form_submit_button("添加客户")
            
            if submitted:
                if customer_name and contact_person and contact_phone:
                    customer_code = f"C{len(customer_data) + 1:04d}"
                    st.success(f"客户 '{customer_name}' (编码: {customer_code}) 添加成功！")
                else:
                    st.error("请填写所有必填字段")

# 客户分析
elif function == "📈 客户分析":
    st.header("客户分析")
    
    # 分析维度选择
    analysis_dimension = st.selectbox("选择分析维度", 
                                    ["RFM分析", "客户价值分析", "客户行为分析", "客户流失分析"])
    
    if analysis_dimension == "RFM分析":
        st.subheader("RFM客户分析")
        
        # RFM指标说明
        col1, col2, col3 = st.columns(3)
        
        with col1:
            st.markdown("**R - 最近购买时间 (Recency)**")
            st.info("客户最后一次购买距今的天数")
        with col2:
            st.markdown("**F - 购买频率 (Frequency)**")
            st.info("客户在特定时间内的购买次数")
        with col3:
            st.markdown("**M - 购买金额 (Monetary)**")
            st.info("客户在特定时间内的购买总金额")
        
        # RFM分析结果
        rfm_data = pd.DataFrame({
            '客户名称': ['华为技术', '小米科技', '比亚迪', '宁德时代', '美的集团', '格力电器', '海尔集团', '联想集团'],
            'R_Score': [5, 4, 3, 5, 2, 3, 1, 2],
            'F_Score': [5, 4, 4, 5, 3, 3, 2, 3],
            'M_Score': [5, 4, 4, 5, 3, 4, 2, 3],
            'RFM_Score': ['555', '444', '344', '555', '233', '334', '122', '233'],
            '客户分群': ['冠军客户', '忠诚客户', '潜力客户', '冠军客户', '一般客户', '潜力客户', '流失风险', '一般客户'],
            '最近购买': [2, 15, 28, 3, 45, 32, 78, 52],
            '购买频次': [12, 8, 7, 11, 4, 5, 2, 4],
            '购买金额': [2800000, 1650000, 1200000, 2100000, 680000, 980000, 320000, 580000]
        })
        
        st.dataframe(rfm_data, use_container_width=True)
        
        # RFM分群可视化
        col1, col2 = st.columns(2)
        
        with col1:
            # 客户分群分布
            segment_counts = rfm_data['客户分群'].value_counts().reset_index()
            segment_counts.columns = ['客户分群', '数量']
            
            fig_segment = px.pie(segment_counts, values='数量', names='客户分群',
                               title="RFM客户分群分布")
            st.plotly_chart(fig_segment, use_container_width=True)
        
        with col2:
            # RFM散点图
            fig_rfm = px.scatter_3d(rfm_data, x='R_Score', y='F_Score', z='M_Score',
                                  color='客户分群', size='购买金额',
                                  title="RFM三维分析图")
            st.plotly_chart(fig_rfm, use_container_width=True)
        
        # 营销建议
        st.subheader("基于RFM的营销建议")
        
        marketing_suggestions = {
            '冠军客户': '🏆 提供VIP服务，优先推荐新产品，建立长期合作关系',
            '忠诚客户': '💎 保持定期沟通，提供个性化服务，防止流失',
            '潜力客户': '🌟 增加接触频次，提供优惠活动，促进转化',
            '一般客户': '📈 定期营销推广，寻找增长机会',
            '流失风险': '⚠️ 紧急挽回措施，了解流失原因，提供特别优惠'
        }
        
        for segment, suggestion in marketing_suggestions.items():
            if segment in rfm_data['客户分群'].values:
                st.info(f"**{segment}**: {suggestion}")
    
    elif analysis_dimension == "客户价值分析":
        st.subheader("客户价值分析")
        
        # 客户价值指标
        col1, col2, col3, col4 = st.columns(4)
        
        with col1:
            st.metric("平均客户价值", "¥1.2M", "¥0.2M")
        with col2:
            st.metric("客户生命周期价值", "¥3.8M", "¥0.5M")
        with col3:
            st.metric("客户获取成本", "¥15K", "-¥2K")
        with col4:
            st.metric("客户保留率", "85.6%", "3.2%")
        
        # 客户价值分布
        col1, col2 = st.columns(2)
        
        with col1:
            # 客户价值区间分布
            value_ranges = pd.DataFrame({
                '价值区间': ['<10万', '10-50万', '50-100万', '100-500万', '>500万'],
                '客户数量': [245, 456, 298, 189, 60],
                '总价值': [1500000, 12800000, 22400000, 45600000, 48000000]
            })
            
            fig_value = px.bar(value_ranges, x='价值区间', y='客户数量',
                             title="客户价值区间分布")
            st.plotly_chart(fig_value, use_container_width=True)
        
        with col2:
            # 帕累托分析（80/20法则）
            pareto_data = pd.DataFrame({
                '客户百分比': [20, 40, 60, 80, 100],
                '收入贡献': [80, 90, 95, 98, 100],
                '累计客户数': [250, 500, 750, 1000, 1248]
            })
            
            fig_pareto = px.line(pareto_data, x='客户百分比', y='收入贡献',
                               title="客户收入贡献帕累托分析")
            fig_pareto.add_hline(y=80, line_dash="dash", line_color="red",
                               annotation_text="80%收入线")
            fig_pareto.add_vline(x=20, line_dash="dash", line_color="red",
                               annotation_text="20%客户线")
            st.plotly_chart(fig_pareto, use_container_width=True)
        
        # 高价值客户分析
        st.subheader("高价值客户分析")
        
        high_value_customers = pd.DataFrame({
            '客户名称': ['华为技术', '宁德时代', '小米科技', '比亚迪', '美的集团'],
            '年度订单额': [2800000, 2100000, 1650000, 1200000, 980000],
            '利润贡献': [840000, 630000, 495000, 360000, 294000],
            '合作年限': [5, 3, 4, 2, 6],
            '增长率': [25.5, 45.2, 18.3, 35.8, 12.6],
            '风险等级': ['低', '低', '中', '中', '低']
        })
        
        st.dataframe(high_value_customers, use_container_width=True)
    
    elif analysis_dimension == "客户行为分析":
        st.subheader("客户行为分析")
        
        # 购买行为分析
        col1, col2 = st.columns(2)
        
        with col1:
            # 购买时间分布
            purchase_time = pd.DataFrame({
                '时间段': ['9-12点', '12-14点', '14-17点', '17-20点', '20-23点', '其他'],
                '订单数量': [156, 89, 234, 178, 98, 45],
                '占比': [19.5, 11.1, 29.3, 22.3, 12.3, 5.6]
            })
            
            fig_time = px.bar(purchase_time, x='时间段', y='订单数量',
                            title="客户购买时间分布")
            st.plotly_chart(fig_time, use_container_width=True)
        
        with col2:
            # 购买渠道分析
            channel_data = pd.DataFrame({
                '渠道': ['官网', '电话', '邮件', '销售拜访', '展会', '其他'],
                '订单数量': [345, 234, 156, 289, 98, 78],
                '转化率': [12.5, 18.3, 8.9, 25.6, 15.2, 9.8]
            })
            
            fig_channel = px.scatter(channel_data, x='订单数量', y='转化率',
                                   size='订单数量', color='渠道',
                                   title="购买渠道效果分析")
            st.plotly_chart(fig_channel, use_container_width=True)
        
        # 产品偏好分析
        st.subheader("客户产品偏好分析")
        
        product_preference = pd.DataFrame({
            '产品类别': ['产品A', '产品B', '产品C', '产品D', '产品E'],
            '购买客户数': [456, 389, 298, 234, 189],
            '平均订单额': [680000, 520000, 450000, 380000, 320000],
            '复购率': [78.5, 65.2, 58.9, 45.6, 38.2],
            '满意度': [4.6, 4.3, 4.1, 3.9, 3.7]
        })
        
        col1, col2 = st.columns(2)
        
        with col1:
            st.dataframe(product_preference, use_container_width=True)
        
        with col2:
            fig_preference = px.scatter(product_preference, x='复购率', y='满意度',
                                      size='购买客户数', color='产品类别',
                                      title="产品偏好矩阵分析")
            st.plotly_chart(fig_preference, use_container_width=True)
    
    elif analysis_dimension == "客户流失分析":
        st.subheader("客户流失分析")
        
        # 流失率指标
        col1, col2, col3, col4 = st.columns(4)
        
        with col1:
            st.metric("月流失率", "2.3%", "-0.5%")
        with col2:
            st.metric("年流失率", "14.2%", "-2.1%")
        with col3:
            st.metric("流失客户数", "28", "-8")
        with col4:
            st.metric("挽回成功率", "35.7%", "8.2%")
        
        # 流失原因分析
        col1, col2 = st.columns(2)
        
        with col1:
            churn_reasons = pd.DataFrame({
                '流失原因': ['价格因素', '服务质量', '产品质量', '竞争对手', '需求变化', '其他'],
                '客户数量': [12, 8, 5, 15, 6, 4],
                '占比': [24.0, 16.0, 10.0, 30.0, 12.0, 8.0]
            })
            
            fig_reasons = px.pie(churn_reasons, values='客户数量', names='流失原因',
                               title="客户流失原因分析")
            st.plotly_chart(fig_reasons, use_container_width=True)
        
        with col2:
            # 流失风险预测
            risk_customers = pd.DataFrame({
                '客户名称': ['客户A', '客户B', '客户C', '客户D', '客户E'],
                '流失风险': [85, 72, 68, 59, 45],
                '最后订单': [65, 45, 38, 28, 15],
                '订单频次下降': [60, 40, 35, 25, 10],
                '建议措施': ['紧急挽回', '重点关注', '定期跟进', '定期跟进', '正常维护']
            })
            
            fig_risk = px.bar(risk_customers, x='客户名称', y='流失风险',
                            color='流失风险',
                            title="客户流失风险预测")
            st.plotly_chart(fig_risk, use_container_width=True)
        
        # 流失预警列表
        st.subheader("流失预警客户列表")
        
        warning_customers = pd.DataFrame({
            '客户名称': ['客户A', '客户B', '客户C', '客户D', '客户E', '客户F'],
            '风险等级': ['高', '高', '中', '中', '中', '低'],
            '流失概率': ['85%', '72%', '68%', '59%', '45%', '32%'],
            '最后联系': ['30天前', '25天前', '20天前', '15天前', '10天前', '5天前'],
            '最后订单': ['65天前', '45天前', '38天前', '28天前', '15天前', '8天前'],
            '客户经理': ['张三', '李四', '王五', '张三', '李四', '王五'],
            '建议措施': ['立即联系', '立即联系', '本周联系', '本周联系', '定期跟进', '正常维护']
        })
        
        # 根据风险等级设置行颜色
        # 使用缓存来避免重复计算样式，减少表格抖动
        def highlight_warning_customer_risk(row):
            if row['风险等级'] == '高':
                return ['background-color: #ffebee'] * len(row)
            elif row['风险等级'] == '中':
                return ['background-color: #fff3e0'] * len(row)
            else:
                return [''] * len(row)
        
        styled_warning_customers = warning_customers.style.apply(highlight_warning_customer_risk, axis=1)
        st.dataframe(styled_warning_customers, use_container_width=True)

# 客户分级
elif function == "🎯 客户分级":
    st.header("客户分级管理")
    
    # 分级标准
    st.subheader("客户分级标准")
    
    grading_criteria = pd.DataFrame({
        '客户等级': ['VIP客户', '重要客户', '普通客户', '新客户'],
        '年订单额': ['≥200万', '50-200万', '10-50万', '<10万'],
        '合作年限': ['≥3年', '≥1年', '≥6个月', '<6个月'],
        '订单频次': ['≥10次/年', '≥6次/年', '≥3次/年', '<3次/年'],
        '付款信用': ['优秀', '良好', '一般', '待评估'],
        '服务策略': ['专属服务', '优先服务', '标准服务', '基础服务']
    })
    
    st.dataframe(grading_criteria, use_container_width=True)
    
    # 客户分级分布
    col1, col2 = st.columns(2)
    
    with col1:
        st.subheader("客户等级分布")
        
        level_distribution = pd.DataFrame({
            '客户等级': ['VIP客户', '重要客户', '普通客户', '新客户'],
            '客户数量': [156, 298, 645, 149],
            '占比': [12.5, 23.9, 51.7, 11.9],
            '贡献收入': [4680000, 5960000, 3220000, 745000]
        })
        
        fig_level = px.pie(level_distribution, values='客户数量', names='客户等级',
                          title="客户等级数量分布")
        st.plotly_chart(fig_level, use_container_width=True)
    
    with col2:
        st.subheader("收入贡献分析")
        
        fig_revenue = px.bar(level_distribution, x='客户等级', y='贡献收入',
                           title="各等级客户收入贡献")
        st.plotly_chart(fig_revenue, use_container_width=True)
    
    # 客户升级/降级分析
    st.subheader("客户等级变动分析")
    
    level_changes = pd.DataFrame({
        '变动类型': ['升级到VIP', '升级到重要', '升级到普通', '降级到重要', '降级到普通', '降级到新客户'],
        '客户数量': [12, 28, 35, 8, 15, 6],
        '主要原因': ['订单额增长', '合作深化', '业务扩展', '订单减少', '竞争加剧', '业务调整']
    })
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.dataframe(level_changes, use_container_width=True)
    
    with col2:
        fig_changes = px.bar(level_changes, x='变动类型', y='客户数量',
                           color='客户数量',
                           title="客户等级变动情况")
        fig_changes.update_layout(xaxis_tickangle=45)
        st.plotly_chart(fig_changes, use_container_width=True)
    
    # 等级调整申请
    st.subheader("客户等级调整")
    
    with st.expander("提交等级调整申请"):
        with st.form("level_adjustment_form"):
            col1, col2 = st.columns(2)
            
            with col1:
                customer_name = st.selectbox("选择客户", 
                                           ['华为技术', '小米科技', '比亚迪', '宁德时代', '美的集团'])
                current_level = st.selectbox("当前等级", ['新客户', '普通客户', '重要客户', 'VIP客户'])
                target_level = st.selectbox("目标等级", ['新客户', '普通客户', '重要客户', 'VIP客户'])
            
            with col2:
                adjustment_reason = st.text_area("调整原因")
                applicant = st.text_input("申请人", value="当前用户")
                effective_date = st.date_input("生效日期", datetime.now())
            
            submitted = st.form_submit_button("提交申请")
            
            if submitted:
                if customer_name and current_level != target_level and adjustment_reason:
                    st.success(f"客户 '{customer_name}' 等级调整申请已提交：{current_level} → {target_level}")
                else:
                    st.error("请填写完整信息且确保等级有变化")

# 客户跟进
elif function == "📞 客户跟进":
    st.header("客户跟进管理")
    
    # 跟进任务概览
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("待跟进任务", "23", "5")
    with col2:
        st.metric("今日完成", "15", "3")
    with col3:
        st.metric("逾期任务", "3", "-2")
    with col4:
        st.metric("跟进成功率", "78.5%", "5.2%")
    
    # 跟进任务列表
    st.subheader("跟进任务列表")
    
    # 筛选条件
    col1, col2, col3 = st.columns(3)
    with col1:
        task_status = st.selectbox("任务状态", ['全部', '待跟进', '进行中', '已完成', '已逾期'])
    with col2:
        priority = st.selectbox("优先级", ['全部', '高', '中', '低'])
    with col3:
        assigned_to = st.selectbox("负责人", ['全部', '张三', '李四', '王五', '赵六'])
    
    # 跟进任务数据
    follow_up_tasks = pd.DataFrame({
        '任务ID': [f'T{i:04d}' for i in range(1, 16)],
        '客户名称': ['华为技术', '小米科技', '比亚迪', '宁德时代', '美的集团'] * 3,
        '跟进类型': ['商务洽谈', '技术支持', '售后服务', '合同续签', '新品推介'] * 3,
        '优先级': ['高', '中', '低'] * 5,
        '计划时间': [datetime.now() + timedelta(days=i-8) for i in range(15)],
        '负责人': ['张三', '李四', '王五', '赵六'] * 3 + ['张三', '李四', '王五'],
        '状态': ['待跟进', '进行中', '已完成', '已逾期'] * 3 + ['待跟进', '进行中', '已完成'],
        '备注': ['需要准备技术方案', '等待客户回复', '已完成拜访', '客户延期', '准备产品资料'] * 3
    })
    
    # 格式化显示
    display_tasks = follow_up_tasks.copy()
    display_tasks['计划时间'] = display_tasks['计划时间'].dt.strftime('%Y-%m-%d')
    
    # 根据状态和优先级设置行颜色
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_display_tasks(row):
        if row['状态'] == '已逾期':
            return ['background-color: #ffebee'] * len(row)
        elif row['优先级'] == '高' and row['状态'] == '待跟进':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return [''] * len(row)
    
    styled_display_tasks = display_tasks.style.apply(highlight_display_tasks, axis=1)
    st.dataframe(styled_display_tasks, use_container_width=True)
    
    # 新建跟进任务
    st.subheader("新建跟进任务")
    
    with st.expander("点击展开新建任务表单"):
        with st.form("create_follow_up_form"):
            col1, col2 = st.columns(2)
            
            with col1:
                customer = st.selectbox("选择客户", 
                                      ['华为技术', '小米科技', '比亚迪', '宁德时代', '美的集团'])
                follow_type = st.selectbox("跟进类型", 
                                         ['商务洽谈', '技术支持', '售后服务', '合同续签', '新品推介', '客户拜访'])
                priority_level = st.selectbox("优先级", ['高', '中', '低'])
            
            with col2:
                planned_date = st.date_input("计划跟进日期", datetime.now() + timedelta(days=1))
                assigned_person = st.selectbox("负责人", ['张三', '李四', '王五', '赵六'])
                reminder_time = st.selectbox("提醒时间", ['30分钟前', '1小时前', '2小时前', '1天前'])
            
            task_description = st.text_area("任务描述")
            task_notes = st.text_area("备注信息")
            
            submitted = st.form_submit_button("创建任务")
            
            if submitted:
                if customer and follow_type and planned_date:
                    task_id = f"T{len(follow_up_tasks) + 1:04d}"
                    st.success(f"跟进任务 '{task_id}' 创建成功！")
                else:
                    st.error("请填写所有必填字段")
    
    # 跟进记录
    st.subheader("跟进记录")
    
    follow_records = pd.DataFrame({
        '跟进时间': [datetime.now() - timedelta(days=i) for i in range(10)],
        '客户名称': ['华为技术', '小米科技', '比亚迪', '宁德时代', '美的集团'] * 2,
        '跟进方式': ['电话', '邮件', '拜访', '微信', '视频会议'] * 2,
        '跟进内容': ['讨论新项目合作', '技术问题解答', '产品演示', '价格谈判', '合同条款确认'] * 2,
        '跟进结果': ['进展顺利', '需要补充资料', '客户满意', '价格待商议', '合同待签署'] * 2,
        '下次跟进': [datetime.now() + timedelta(days=i+1) for i in range(10)],
        '跟进人': ['张三', '李四', '王五', '赵六'] * 2 + ['张三', '李四']
    })
    
    # 格式化显示
    display_records = follow_records.copy()
    display_records['跟进时间'] = display_records['跟进时间'].dt.strftime('%Y-%m-%d %H:%M')
    display_records['下次跟进'] = display_records['下次跟进'].dt.strftime('%Y-%m-%d')
    
    st.dataframe(display_records, use_container_width=True)
    
    # 跟进统计
    col1, col2 = st.columns(2)
    
    with col1:
        st.subheader("跟进方式统计")
        
        method_stats = follow_records['跟进方式'].value_counts().reset_index()
        method_stats.columns = ['跟进方式', '次数']
        
        fig_method = px.pie(method_stats, values='次数', names='跟进方式',
                          title="跟进方式分布")
        st.plotly_chart(fig_method, use_container_width=True)
    
    with col2:
        st.subheader("跟进效果分析")
        
        result_stats = follow_records['跟进结果'].value_counts().reset_index()
        result_stats.columns = ['跟进结果', '次数']
        
        fig_result = px.bar(result_stats, x='跟进结果', y='次数',
                          title="跟进结果统计")
        fig_result.update_layout(xaxis_tickangle=45)
        st.plotly_chart(fig_result, use_container_width=True)

# 订单历史
elif function == "📋 订单历史":
    st.header("客户订单历史")
    
    # 客户选择
    selected_customer = st.selectbox("选择客户", 
                                   ['华为技术', '小米科技', '比亚迪', '宁德时代', '美的集团', '格力电器'])
    
    if selected_customer:
        # 客户订单概览
        col1, col2, col3, col4 = st.columns(4)
        
        with col1:
            st.metric("总订单数", "45", "8")
        with col2:
            st.metric("总订单额", "¥12.8M", "¥2.3M")
        with col3:
            st.metric("平均订单额", "¥284K", "¥15K")
        with col4:
            st.metric("最近订单", "3天前", "")
        
        # 订单历史列表
        st.subheader(f"{selected_customer} - 订单历史")
        
        order_history = pd.DataFrame({
            '订单号': [f'ORD{datetime.now().strftime("%Y%m")}{i:04d}' for i in range(1, 16)],
            '订单日期': [datetime.now() - timedelta(days=i*15) for i in range(15)],
            '产品名称': ['产品A', '产品B', '产品C', '产品D', '产品E'] * 3,
            '数量': np.random.randint(10, 100, 15),
            '单价': [50000, 35000, 28000, 42000, 38000] * 3,
            '订单金额': [np.random.randint(200000, 800000) for _ in range(15)],
            '订单状态': ['已完成', '已发货', '生产中', '已确认', '已取消'] * 3,
            '交付日期': [datetime.now() - timedelta(days=i*15-10) for i in range(15)],
            '备注': ['正常交付', '提前交付', '延期交付', '正常交付', '客户取消'] * 3
        })
        
        # 格式化显示
        display_orders = order_history.copy()
        display_orders['订单日期'] = display_orders['订单日期'].dt.strftime('%Y-%m-%d')
        display_orders['交付日期'] = display_orders['交付日期'].dt.strftime('%Y-%m-%d')
        display_orders['单价'] = display_orders['单价'].apply(lambda x: f'¥{x:,.0f}')
        display_orders['订单金额'] = display_orders['订单金额'].apply(lambda x: f'¥{x:,.0f}')
        
        st.dataframe(display_orders, use_container_width=True)
        
        # 订单趋势分析
        col1, col2 = st.columns(2)
        
        with col1:
            st.subheader("订单金额趋势")
            
            # 按月统计订单
            monthly_orders = order_history.copy()
            monthly_orders['月份'] = monthly_orders['订单日期'].dt.to_period('M')
            monthly_stats = monthly_orders.groupby('月份').agg({
                '订单金额': 'sum',
                '订单号': 'count'
            }).reset_index()
            monthly_stats['月份'] = monthly_stats['月份'].astype(str)
            
            fig_trend = px.line(monthly_stats, x='月份', y='订单金额',
                              title=f"{selected_customer} 月度订单金额趋势")
            st.plotly_chart(fig_trend, use_container_width=True)
        
        with col2:
            st.subheader("产品订购分析")
            
            product_stats = order_history.groupby('产品名称').agg({
                '订单金额': 'sum',
                '数量': 'sum'
            }).reset_index()
            
            fig_product = px.bar(product_stats, x='产品名称', y='订单金额',
                               title=f"{selected_customer} 产品订购统计")
            st.plotly_chart(fig_product, use_container_width=True)
        
        # 订单状态分析
        st.subheader("订单状态分析")
        
        status_stats = order_history['订单状态'].value_counts().reset_index()
        status_stats.columns = ['订单状态', '数量']
        
        col1, col2 = st.columns(2)
        
        with col1:
            st.dataframe(status_stats, use_container_width=True)
        
        with col2:
            fig_status = px.pie(status_stats, values='数量', names='订单状态',
                              title="订单状态分布")
            st.plotly_chart(fig_status, use_container_width=True)
        
        # 交付表现分析
        st.subheader("交付表现分析")
        
        # 计算交付天数
        delivery_analysis = order_history.copy()
        delivery_analysis['交付天数'] = (delivery_analysis['交付日期'] - delivery_analysis['订单日期']).dt.days
        delivery_analysis = delivery_analysis[delivery_analysis['订单状态'] == '已完成']
        
        col1, col2, col3 = st.columns(3)
        
        with col1:
            avg_delivery = delivery_analysis['交付天数'].mean()
            st.metric("平均交付天数", f"{avg_delivery:.1f}天", "")
        
        with col2:
            on_time_rate = len(delivery_analysis[delivery_analysis['交付天数'] <= 30]) / len(delivery_analysis) * 100
            st.metric("按时交付率", f"{on_time_rate:.1f}%", "")
        
        with col3:
            early_delivery = len(delivery_analysis[delivery_analysis['交付天数'] < 20]) / len(delivery_analysis) * 100
            st.metric("提前交付率", f"{early_delivery:.1f}%", "")

# 客户价值
elif function == "💰 客户价值":
    st.header("客户价值分析")
    
    # 价值指标概览
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("总客户价值", "¥156.8M", "¥23.5M")
    with col2:
        st.metric("平均客户价值", "¥125.6K", "¥18.2K")
    with col3:
        st.metric("客户获取成本", "¥15.2K", "-¥2.1K")
    with col4:
        st.metric("投资回报率", "8.26", "1.2")
    
    # 客户价值排名
    st.subheader("客户价值排名")
    
    customer_value = pd.DataFrame({
        '排名': range(1, 21),
        '客户名称': ['华为技术', '宁德时代', '小米科技', '比亚迪', '美的集团', '格力电器',
                  '海尔集团', '联想集团', '腾讯科技', '阿里巴巴', '百度', '京东',
                  '字节跳动', '滴滴出行', '美团', '拼多多', '网易', '新浪', '搜狐', '360'],
        '年度订单额': [2800000, 2100000, 1650000, 1200000, 980000, 850000,
                    720000, 680000, 650000, 620000, 580000, 550000,
                    520000, 480000, 450000, 420000, 380000, 350000, 320000, 280000],
        '利润贡献': [840000, 630000, 495000, 360000, 294000, 255000,
                   216000, 204000, 195000, 186000, 174000, 165000,
                   156000, 144000, 135000, 126000, 114000, 105000, 96000, 84000],
        '客户等级': ['VIP', 'VIP', 'VIP', '重要', '重要', '重要',
                  '普通', '重要', 'VIP', 'VIP', '重要', 'VIP',
                  '重要', '普通', '普通', '重要', '普通', '普通', '普通', '普通'],
        '合作年限': [5, 3, 4, 2, 6, 4, 3, 5, 2, 3, 4, 2, 1, 2, 3, 1, 4, 5, 6, 3],
        'CLV': [14000000, 6300000, 6600000, 2400000, 5880000, 3400000,
               2160000, 3400000, 1300000, 1860000, 2784000, 1650000,
               1560000, 1440000, 1350000, 1260000, 1140000, 1575000, 1920000, 840000]
    })
    
    # 格式化显示
    display_value = customer_value.copy()
    display_value['年度订单额'] = display_value['年度订单额'].apply(lambda x: f'¥{x:,.0f}')
    display_value['利润贡献'] = display_value['利润贡献'].apply(lambda x: f'¥{x:,.0f}')
    display_value['CLV'] = display_value['CLV'].apply(lambda x: f'¥{x:,.0f}')
    
    st.dataframe(display_value, use_container_width=True)
    
    # 价值分析图表
    col1, col2 = st.columns(2)
    
    with col1:
        st.subheader("客户价值vs利润贡献")
        
        fig_value = px.scatter(customer_value, x='年度订单额', y='利润贡献',
                             size='CLV', color='客户等级',
                             hover_name='客户名称',
                             title="客户价值矩阵分析")
        st.plotly_chart(fig_value, use_container_width=True)
    
    with col2:
        st.subheader("客户生命周期价值分布")
        
        clv_ranges = pd.DataFrame({
            'CLV区间': ['<100万', '100-500万', '500-1000万', '1000-5000万', '>5000万'],
            '客户数量': [8, 7, 3, 1, 1],
            '总CLV': [600000, 2100000, 2100000, 2400000, 14000000]
        })
        
        fig_clv = px.bar(clv_ranges, x='CLV区间', y='客户数量',
                        title="客户生命周期价值分布")
        st.plotly_chart(fig_clv, use_container_width=True)
    
    # 价值提升建议
    st.subheader("客户价值提升建议")
    
    improvement_suggestions = pd.DataFrame({
        '客户名称': ['比亚迪', '海尔集团', '滴滴出行', '美团', '拼多多'],
        '当前价值': ['¥1,200,000', '¥720,000', '¥480,000', '¥450,000', '¥420,000'],
        '潜在价值': ['¥1,800,000', '¥1,200,000', '¥720,000', '¥680,000', '¥650,000'],
        '提升空间': ['50%', '67%', '50%', '51%', '55%'],
        '建议措施': ['扩大产品线合作', '深化技术合作', '增加服务频次', '优化产品组合', '提供定制方案'],
        '预期时间': ['6个月', '9个月', '6个月', '8个月', '12个月']
    })
    
    st.dataframe(improvement_suggestions, use_container_width=True)
    
    # 投资回报分析
    st.subheader("客户投资回报分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # ROI分析
        roi_data = pd.DataFrame({
            '客户等级': ['VIP客户', '重要客户', '普通客户', '新客户'],
            '平均获取成本': [25000, 18000, 12000, 8000],
            '平均年收入': [1800000, 800000, 350000, 120000],
            'ROI': [72, 44, 29, 15]
        })
        
        fig_roi = px.bar(roi_data, x='客户等级', y='ROI',
                        title="各等级客户投资回报率")
        st.plotly_chart(fig_roi, use_container_width=True)
    
    with col2:
        # 成本效益分析
        cost_benefit = pd.DataFrame({
            '投资项目': ['客户获取', '客户维护', '客户升级', '客户挽回'],
            '投资成本': [15000, 5000, 8000, 12000],
            '预期收益': [120000, 50000, 80000, 60000],
            '投资回报': [8.0, 10.0, 10.0, 5.0]
        })
        
        fig_cost = px.scatter(cost_benefit, x='投资成本', y='预期收益',
                            size='投资回报', color='投资项目',
                            title="客户投资成本效益分析")
        st.plotly_chart(fig_cost, use_container_width=True)

# 页面底部信息
st.markdown("---")
st.markdown(
    """
    <div style="text-align: center; color: #666; font-size: 0.9rem;">
        客户管理系统 | 数据更新时间: {}
    </div>
    """.format(datetime.now().strftime("%Y-%m-%d %H:%M:%S")),
    unsafe_allow_html=True
)